package com.mdd.common.util;


public class DistanceUtils {
    // 地球平均半径（单位：米）
    private static final double EARTH_RADIUS = 6371000;

    /**
     * 计算两个经纬度点之间的距离（Haversine 公式）
     * @param lat1 第一个点的纬度
     * @param lon1 第一个点的经度
     * @param lat2 第二个点的纬度
     * @param lon2 第二个点的经度
     * @return 两点间距离（米）
     */
    public static double calculateDistance(double lat1, double lon1, double lat2, double lon2) {
        // 将角度转换为弧度
        double radLat1 = Math.toRadians(lat1);
        double radLon1 = Math.toRadians(lon1);
        double radLat2 = Math.toRadians(lat2);
        double radLon2 = Math.toRadians(lon2);

        // 计算差值
        double dLat = radLat2 - radLat1;
        double dLon = radLon2 - radLon1;

        // Haversine 公式核心计算
        double a = Math.pow(Math.sin(dLat / 2), 2)
                + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(dLon / 2), 2);
        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));

        return EARTH_RADIUS * c;
    }

//    // 禁止实例化工具类
//    private DistanceUtils() {}


    public static void main(String[] args) {
        // 示例：北京（39.9042, 116.4074）到上海（31.2304, 121.4737）
        double distance = DistanceUtils.calculateDistance(39.9042, 116.4074, 31.2304, 121.4737);
        System.out.println("距离：" + distance/1000 + " qian米");  // 输出约 1075000 米（1075公里）
    }

}

